import axios from 'axios';
import { history } from 'umi';

axios.defaults.baseURL = 'http://192.168.248.70:8084'; //39.101.170.85
axios.defaults.timeout = 5000;
axios.defaults.headers.Authorization = localStorage.getItem('apiKey');
//跨域是否允许携带凭证
// axios.defaults.withCredentials = true;

//设置请求传递数据的格式
/**
 * 1. Content-Type: application/json ： 请求体中的数据会以json字符串的形式发送到后端
   2. Content-Type: application/x-www-form-urlencoded：请求体中的数据会以普通表单形式（键值对）发送到后端
   3. Content-Type: multipart/form-data： 它会将请求体的数据处理为一条消息，以标签为单元，用分隔符分开。既可以上传键值对，也可以上传文件。
  */
axios.defaults.headers.post['Content-Type'] =
  'application/x-www-form-urlencoded';

const instance = axios.create({
  contentType: 'application/json;charset=UTF-8',
  dataType: 'json',
  success: function (result) {
    console.log('成功了1', result);
  },
});

//请求拦截器
instance.interceptors.request.use(
  (config) => {
    //携带token
    let token = sessionStorage.getItem('apiKey');
    token && (config.headers.Authorization = token);
    return config;
  },
  (err) => {
    return Promise.reject(err);
  },
);

//响应拦截器
instance.interceptors.response.use(
  (res) => {
    return res.data;
  },
  (err) => {
    let { response } = err;
    if (response) {
      //返回结果
      switch (response.status) {
        case 401: // => 权限
          // history.push('/401')
          console.log('401----！！！');
          break;
        case 403: //=> 服务器拒绝执行（token）过期
          // history.push('403')
          console.log('403----权限不足！！！');
          // history.push('/login')
          break;
        case 404: //找不到页面
          // history.push('/404')
          console.log('404----找不到页面！！！');
          break;
      }
    } else {
      //服务器结果没有返回
      if (!window.navigator.onLine) {
        alert('网络波动！请稍后');
      }
    }
  },
);

export default instance;
